package com.zhb.zhbaiagent.rag;

import com.alibaba.cloud.ai.dashscope.api.DashScopeApi;
import com.alibaba.cloud.ai.dashscope.rag.DashScopeDocumentRetriever;
import com.alibaba.cloud.ai.dashscope.rag.DashScopeDocumentRetrieverOptions;
import lombok.extern.slf4j.Slf4j;
import org.springframework.ai.chat.client.advisor.RetrievalAugmentationAdvisor;
import org.springframework.ai.chat.client.advisor.api.Advisor;
import org.springframework.ai.rag.retrieval.search.DocumentRetriever;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * 配置类，用于初始化基于云知识库‍的检索增强顾问
 */
/**
 * 配置类，用于初始化基于云知识库的检索增强顾问（RAG Cloud Advisor）
 * 通过该配置类，构建一个基于 DashScope API 的文档检索器，并将其绑定到检索增强顾问中
 * 以便在调用 AI 模型时动态检索外部知识并增强提示内容
 */
@Configuration
@Slf4j
public class LoveAppRagCloudAdvisorConfig {

    /**
     * 从配置中注入 DashScope 的 API Key
     * 用于认证和访问 DashScope 提供的云端服务（如知识库检索）
     */
    @Value("${spring.ai.dashscope.api-key}")
    private String dashScopeApiKey;

    /**
     * 定义一个 Bean，用于创建检索增强顾问（RetrievalAugmentationAdvisor）
     * 该顾问会结合指定的知识库进行上下文增强，提升模型回答的准确性和相关性
     *
     * @return 返回配置好的 Advisor 实例，可被注入到 ChatClient 中使用
     */
    @Bean
    public Advisor ragCloudAdvisor() {
        // 初始化 DashScope API 客户端，用于后续的知识库操作
        DashScopeApi dashScopeApi = new DashScopeApi(dashScopeApiKey);

        // 定义要使用的云知识库名称，此处为“AI恋爱大师”
        final String KNOWLEDGE_INDEX = "AI恋爱大师";

        // 创建文档检索器，连接 DashScope 云端知识库
        DocumentRetriever documentRetriever = new DashScopeDocumentRetriever(dashScopeApi,
                DashScopeDocumentRetrieverOptions.builder()
                        .withIndexName(KNOWLEDGE_INDEX) // 设置检索索引名称
                        .build());

        // 构建并返回检索增强顾问，封装文档检索器以支持 RAG 增强逻辑
        return RetrievalAugmentationAdvisor.builder()
                .documentRetriever(documentRetriever)
                .build();
    }
}

